| parseLine | ::= | address_list ( "\r" )? "\n" |
| parseAddressList0 | ::= | address_list <EOF> |
| parseAddress0 | ::= | address <EOF> |
| parseMailbox0 | ::= | mailbox <EOF> |
| address_list | ::= | ( address )? ( "," ( address )? )* |
| address | ::= | ( addr_spec | angle_addr | ( phrase ( group_body | angle_addr ) ) ) |
| mailbox | ::= | ( addr_spec | angle_addr | name_addr ) |
| name_addr | ::= | phrase angle_addr |
| group_body | ::= | ":" ( mailbox )? ( "," ( mailbox )? )* ";" |
| angle_addr | ::= | "<" ( route )? addr_spec ">" |
| route | ::= | "@" domain ( ( "," )* "@" domain )* ":" |
| phrase | ::= | ( <DOTATOM> | <QUOTEDSTRING> )+ |
| addr_spec | ::= | ( local_part "@" domain ) |
| local_part | ::= | ( <DOTATOM> | <QUOTEDSTRING> ) ( ( "." )? ( <DOTATOM> | <QUOTEDSTRING> ) )* |
| domain | ::= | ( ( <DOTATOM> ( ( "." )? <DOTATOM> )* ) | <DOMAINLITERAL> ) |